home *** CD-ROM | disk | FTP | other *** search
- *****Listing 1*****
-
- /* Find the Potency of an A for a given M
- * The C Users Journal
- * Creating Pseudo Random Numbers
- * Robert Fruit
- *
- **************************************************************************/
-
- int potency( long A, long M )
- {
- long B; /* power of A */
- int i;
-
- A--; /* decrement A for potency test */
- B = A; /* set initial power of A */
- B = B % M;
- i = 0;
- while( (B != 0) && (i < 25) ){ /* loop while power of A not zero */
- B = ( (A * B) % M );
- i++;
- }
- if( i >= 25 ) /* if test failed report error */
- i = -1;
- return( i );
- }
-
-
-
- /* Find the Potency of an A for maximum unsigned long M
- * The C Users Journal
- * Creating Pseudo Random Numbers
- * Robert Fruit
- *
- **************************************************************************/
-
- int potencyMaxM( long A )
- {
- long B;
- int i;
-
- A--;
- B = A;
- i = 0;
- while( (B != 0) && (i < 25) ){
- B = A * B;
- i++;
- }
- if( i >= 25 )
- i = -1;
- return( i );
- }
-
-
-
- /*
- * Test program to find the potency of A
- *
- **************************************************************************/
-
- #include <stdio.h>
- #include <stdlib.h>
-
- int potency( long A, long M );
-
- void main( void )
- {
- int pot;
- long A,M;
-
- printf("\n\n\nFind the potency for A values for a given M\n\n");
- printf("What is the M value --> ");
- scanf("%ld",&M);
- printf("\n\nWhat A value is to be tested --> ");
- scanf("%ld",&A);
- while( A != 0 ){
- pot = potency( A, M );
- printf("\nThe potency for A, %ld, given M, %ld, is %d",A,M,pot);
- printf("\n\nWhat A value is to be tested --> ");
- scanf("%ld",&A);
- }
- }
-
-
-
- Listing 2 includes two potency functions. The first one needs a M value
- in order to calculate the potency. The second potency function assumes
- that M has a value of 2^32, the maximum value for an unsigned long. The
- testing program only uses the first potency function.
-
-
-